'use strict';
// 获取数据库引用
const db = uniCloud.database();
// 获取产品集合引用
const productCollection = db.collection('products');
const axios = require('axios');

exports.main = async (event, context) => {
    // 打印日志，便于调试
    console.log('product function called', event);
    // 解构获取操作类型和数据
    const { action, data } = event;

    try {
        // 根据不同的操作类型执行不同的功能
        switch (action) {
            case 'create':
                // 创建新产品
                return await createProduct(data);
            case 'list':
                // 获取产品列表
                return await getProductList(data);
            case 'detail':
                // 获取产品详情
                return await getProductDetail(data);
            case 'update':
                // 更新产品信息
                return await updateProduct(data);
            case 'delete':
                // 删除产品
                return await deleteProduct(data);
            case 'sendMessage':
                // 发送消息
                return await sendMessage(data);
            default:
                throw new Error('未知的操作类型');
        }
    } catch (error) {
        console.error('产品操作失败:', error);
        return {
            code: -1,
            message: error.message || '操作失败',
            data: null
        };
    }
};

// 创建新产品函数
async function createProduct(data) {
    // 解构获取产品信息
    const { name, description, price, images = [], userId } = data;

    // 数据验证
    if (!name || !description || !price || !userId) {
        throw new Error('缺少必要参数');
    }

    // 构建产品数据对象
    const productData = {
        name,                   // 产品名称
        description,            // 产品描述
        price: Number(price),   // 价格（转换为数字类型）
        images,                 // 图片数组
        userId,                 // 发布者ID
        createTime: Date.now(), // 创建时间
        updateTime: Date.now(), // 更新时间
        status: 'active'        // 产品状态：active-上架中 inactive-已下架
    };

    // 添加到数据库
    const result = await productCollection.add(productData);

    // 返回成功响应
    return {
        code: 0,
        message: '创建成功',
        data: {
            id: result.id,  // 新创建的产品ID
            ...productData  // 产品完整信息
        }
    };
}

// 获取产品列表函数
async function getProductList(data) {
    // 解构获取查询参数，设置默认值
    const { userId, status, page = 1, pageSize = 10 } = data;
    let query = productCollection;

    // 构建查询条件
    if (userId) {
        // 如果指定了用户ID，只查询该用户的产品
        query = query.where({ userId });
    }
    if (status) {
        // 如果指定了状态，只查询特定状态的产品
        query = query.where({ status });
    }

    // 执行分页查询
    const list = await query
        .skip((page - 1) * pageSize)  // 跳过前面的数据
        .limit(pageSize)              // 限制返回数量
        .orderBy('createTime', 'desc') // 按创建时间倒序排序
        .get();

    // 获取总数
    const total = await query.count();

    // 返回查询结果
    return {
        code: 0,
        message: '获取成功',
        data: {
            list: list.data,    // 产品列表
            total: total.total, // 总数量
            page,              // 当前页码
            pageSize          // 每页数量
        }
    };
}

// 获取产品详情函数
async function getProductDetail(data) {
    // 解构获取产品ID
    const { id } = data;

    // 数据验证
    if (!id) {
        throw new Error('缺少必要参数');
    }

    // 查询数据库
    const product = await productCollection.doc(id).get();

    // 返回查询结果
    return {
        code: 0,
        message: '获取成功',
        data: product.data
    };
}

// 更新产品信息函数
async function updateProduct(data) {
    // 解构获取产品ID和更新后的数据
    const { id, name, description, price, images } = data;

    // 数据验证
    if (!id || !name || !description || !price) {
        throw new Error('缺少必要参数');
    }

    // 构建更新后的数据对象
    const productData = {
        name,                   // 产品名称
        description,            // 产品描述
        price: Number(price),   // 价格（转换为数字类型）
        images,                 // 图片数组
        updateTime: Date.now()  // 更新时间
    };

    // 更新数据库
    const result = await productCollection.doc(id).update(productData);

    // 返回成功响应
    return {
        code: 0,
        message: '更新成功',
        data: null
    };
}

// 删除产品函数
async function deleteProduct(data) {
    // 解构获取产品ID
    const { id } = data;

    // 数据验证
    if (!id) {
        throw new Error('缺少必要参数');
    }

    // 删除数据库
    const result = await productCollection.doc(id).remove();

    // 返回成功响应
    return {
        code: 0,
        message: '删除成功',
        data: null
    };
}

// 发送消息函数
async function sendMessage(data) {
    const { message, userId, chatId } = data;

    try {
        // 调用AI服务
        const aiResponse = await axios.post('AI服务的URL', {
            message: message.content, // 确保这里的字段名与AI服务要求的字段一致
            userId: userId,
            chatId: chatId
        });

        return {
            code: 0,
            response: aiResponse.data.response, // 确保这里的字段名与AI服务返回的字段一致
            chatId: aiResponse.data.chatId // 如果有返回chatId
        };
    } catch (error) {
        return {
            code: -1,
            message: 'AI服务调用失败: ' + error.message // 返回错误信息
        };
    }
} 